#define MAX 20
#include<stdio.h>
typedef struct{
int n;    //顺序表元素个数
int data[MAX+1];   //存放元素的数组，下标从1开始
} SEQTABLE; 

void delitem(SEQTABLE *st,int item);

int  main()
{
	int i;

	SEQTABLE st = {9, {0,5,7,9,8,7,2,6,7,9}};
	delitem(&st, 7);

	for(i = 1; i <= st.n; i++)
	{
		printf("%4d", st.data[i]);
	}
	printf("\n");
	return 0;
}

//传入:顺序表和需要删除的数字
//题目所求函数 功能：删除item传入的数字
void delitem(SEQTABLE *st,int item){
	int i,m=0;//i为计数器,m记录程序当前为止删除了多少个元素，需要将下标左移多少
	//注意:在main中是从数组[1]开始读取的
	for(i=1;i<=st->n;i++){
		if(st->data[i]==item){
			m++;
		}
		else{
			st->data[i-m]=st->data[i];
		}
	}
		st->n-=m;
};

/*
设计一个函数
void delitem(SEQTABLE *st, int item)
在顺序表st中，删除值为item的所有元素，要求算法复杂度为O(n)。函数中只能有一个循环语句。
其中SEQTABLE是如下结构体：
#define MAX 20
typedef struct{
int n;    //顺序表元素个数
int data[MAX+1];   //存放元素的数组，下标从1开始
} SEQTABLE; 
如下的main函数执行后
int  main(int argc, _TCHAR* argv[])
{
	int i;

	SEQTABLE st = {9, {0,5,7,9,8,7,2,6,7,9}};
	delitem(&st, 7);

	for(i = 1; i <= st.n; i++)
	{
		printf("%4d", st.data[i]);
	}
	printf("\n");
	return 0;
}
执行的结果为
   5   9   8   2   6   9
*/